{-# LANGUAGE FlexibleContexts #-}

module TestAssoziativArray where

import qualified Trie as T
import qualified AssoziativArray.Class as AA

--ruft die allgemeine funktion mit der Trie-Implementierung auf
test :: T.Trie Integer
test = wordCount T.empty "hallo Erik wie gehts Erik gehts gut"

-- ist unabhaengig von Implementierung
-- nimmt ein Zielassoziativarray und einen text
-- liefert ein assoziativarray mit den worthaeufigkeiten 
wordCount :: AA.AssoziativArray s Integer => s Integer -> String -> s Integer
wordCount targetArray text = foldl countfun targetArray (words text)

-- ist unabhaengig von der Implementierung
-- fuegt ein wort in das array ein und setzt so den zaehler hoch
countfun :: AA.AssoziativArray s Integer => s Integer -> String -> s Integer
countfun array word = 
        let
                oldCount = AA.getFromAA word array
                newCount = case oldCount of
                        Nothing -> 1
                        Just x  -> x+1
        in
                AA.insertInAA word newCount array
